/**
 * 
 */
package gwtool.gui.dataSetView;

import gwtool.container.DataSetItem;
import gwtool.container.Geprueft;
import gwtool.container.InlineLehrgang;
import gwtool.container.InlinePruefung;
import gwtool.container.OnlineLehrgangItem;
import gwtool.container.OnlinePruefungItem;
import gwtool.container.PersonItem;
import gwtool.container.PruefungAnzeigen;
import gwtool.gui.MainController;
import gwtool.gui.components.ChangeSupport;
import gwtool.gui.components.ComboBoxWithChangeSupport;
import gwtool.gui.components.JTextAreaWithMenu;
import gwtool.gui.components.JTextFieldWithMenu;
import gwtool.gui.components.JXDatePickerWithChangeSupport;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import org.jdesktop.swingx.JXDatePicker;
import javax.swing.DefaultComboBoxModel;
import java.awt.Color;

/**
 * @author Christian
 * 
 */
public class DataSetPersonPanel extends JPanel implements DataSetView, ActionListener {

	private DataSetViewController controller;

	private JTextAreaWithMenu kommentartextArea;

	private JLabel lblKommentar;

	private JLabel lblNewLabel;

	private JTextFieldWithMenu jBezeichnerTextField;

	private Panel buttonpanel;

	private JButton btnSave;

	private JButton copybutton;

	private JButton btnSchlieeen;

	private JLabel lblMitgliedsnummer;

	private JTextFieldWithMenu jMitgliedsnummerTextfield;

	private JTextFieldWithMenu jgeschlechtsTextfield;

	private JLabel lblStrae;

	private JTextFieldWithMenu jPLZTextfield;

	private JTextFieldWithMenu jOrtTextfield;

	private JTextFieldWithMenu jStrasseTextfield;

	private JTextFieldWithMenu jTelefonTextField;

	private JLabel lblPlz;

	private JLabel lblOrt;

	private JList lehrgaengelist;

	private JLabel lblGeschlecht;

	private JLabel lblTelefon;

	private JLabel lblHandy;

	private JTextFieldWithMenu jHandyTextfield;

	private JLabel lbldurchgefhrteprfungen;

	private JLabel lblnotwendigeprfungen;

	private JLabel lbllehrgngefunktionen;

	private JLabel lblEmail;

	private JTextFieldWithMenu jEmailTextField;

	private JLabel lblGeburtstag;

	private JXDatePickerWithChangeSupport jGeburtstagPicker;

	private JPanel panel_1;

	private JButton btnaddLehrgangbutton;

	private JButton btnLehrgangEdit;

	private JButton btnDelLehrgang;

	private JPanel panel_2;

	private JScrollPane scrollPane;

	private JPanel panel_3;

	private JPanel panel_4;

	private JButton btnAddDurchgefuehrt;

	private JButton btnDurchgefuehrtEditButton;

	private JButton btnDurchgefuehrtDel;

	private JPanel panel_5;

	private JButton btnAddNoetig;

	private JButton btnEditNoetig;

	private JButton btnDelNoetig;

	private JScrollPane jKommentarTextArea;

	private List<ChangeSupport> changeList = new ArrayList<>();

	private boolean changesFlag;

	private JScrollPane scrollPane_1;

	private JList list;

	private JScrollPane scrollPane_2;

	private JList list_1;

	private PersonItem item;

	private JLabel lblNchstePrfung;

	private JLabel jNaechstePruefungAnzeigen;

	private JButton btnPfungEintragen;

	private JPanel panel;

	private JLabel lblStatus;

	private ComboBoxWithChangeSupport statusComboBox;

	private JLabel lblKeineSchreibrechte;

	private JButton btnDrucken;

	public DataSetPersonPanel(DataSetViewController controller, PersonItem item, boolean zeigeButtons) {

		this.controller = controller;
		this.item = item;
		initialize();
		boolean erlaubt = controller.isAendernErlaubt();
		if (!erlaubt) {
			for (ChangeSupport c : changeList) {
				c.setEditable(erlaubt);
			}
			getBtnKopieErstellen().setEnabled(false);
			getBtnSpeichern().setEnabled(false);
			getStatusComboBox().setEditable(false);
			getStatusComboBox().setEnabled(false);
			getBtnaddLehrgangbutton().setEnabled(false);
			getBtnAddNoetig().setEnabled(false);
			getBtnDelLehrgang().setEnabled(false);
			getBtnDurchgefuehrtDel().setEnabled(false);
			getBtnDurchgefuehrtEditButton().setEnabled(false);
			getBtnEditNoetig().setEnabled(false);
			getBtnKopieErstellen().setEnabled(false);
			getBtnLehrgangEdit().setEnabled(false);
			getBtnPfungEintragen().setEnabled(false);
			getBtnDelNoetig().setEnabled(false);
			getBtnAddDurchgefuehrt().setEnabled(false);
			getLblKeineSchreibrechte().setVisible(true);
		} else {
			getLblKeineSchreibrechte().setVisible(false);
		}
		if (!zeigeButtons) {
			getBtnKopieErstellen().setVisible(false);
			getBtnSpeichern().setVisible(false);
			getBtnSchlieen().setVisible(false);
		}
	}

	private void initialize() {

		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 27, 6, 54, 0, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 0.0, 1.0, 0.0, 1.0, Double.MIN_VALUE };
		gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0,
				Double.MIN_VALUE };
		setLayout(gridBagLayout);
		GridBagConstraints gbc_lblKeineSchreibrechte = new GridBagConstraints();
		gbc_lblKeineSchreibrechte.insets = new Insets(0, 0, 5, 5);
		gbc_lblKeineSchreibrechte.gridx = 1;
		gbc_lblKeineSchreibrechte.gridy = 0;
		add(getLblKeineSchreibrechte(), gbc_lblKeineSchreibrechte);
		GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
		gbc_lblNewLabel.anchor = GridBagConstraints.EAST;
		gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
		gbc_lblNewLabel.gridx = 0;
		gbc_lblNewLabel.gridy = 1;
		add(getLblNewLabel(), gbc_lblNewLabel);
		GridBagConstraints gbc_jBezeichnerTextField = new GridBagConstraints();
		gbc_jBezeichnerTextField.gridwidth = 2;
		gbc_jBezeichnerTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_jBezeichnerTextField.insets = new Insets(0, 0, 5, 5);
		gbc_jBezeichnerTextField.gridx = 1;
		gbc_jBezeichnerTextField.gridy = 1;
		add(getJBezeichnerTextField(), gbc_jBezeichnerTextField);
		GridBagConstraints gbc_lblGeschlecht = new GridBagConstraints();
		gbc_lblGeschlecht.insets = new Insets(0, 0, 5, 5);
		gbc_lblGeschlecht.anchor = GridBagConstraints.EAST;
		gbc_lblGeschlecht.gridx = 0;
		gbc_lblGeschlecht.gridy = 2;
		add(getLblGeschlecht(), gbc_lblGeschlecht);
		GridBagConstraints gbc_jgeschlechtsTextfield = new GridBagConstraints();
		gbc_jgeschlechtsTextfield.insets = new Insets(0, 0, 5, 5);
		gbc_jgeschlechtsTextfield.fill = GridBagConstraints.HORIZONTAL;
		gbc_jgeschlechtsTextfield.gridx = 1;
		gbc_jgeschlechtsTextfield.gridy = 2;
		add(getJgeschlechtsTextfield(), gbc_jgeschlechtsTextfield);
		GridBagConstraints gbc_lblMitgliedsnummer = new GridBagConstraints();
		gbc_lblMitgliedsnummer.anchor = GridBagConstraints.EAST;
		gbc_lblMitgliedsnummer.insets = new Insets(0, 0, 5, 5);
		gbc_lblMitgliedsnummer.gridx = 2;
		gbc_lblMitgliedsnummer.gridy = 2;
		add(getLblMitgliedsnummer(), gbc_lblMitgliedsnummer);
		GridBagConstraints gbc_jMitgliedsnummerTextfield = new GridBagConstraints();
		gbc_jMitgliedsnummerTextfield.insets = new Insets(0, 0, 5, 0);
		gbc_jMitgliedsnummerTextfield.fill = GridBagConstraints.HORIZONTAL;
		gbc_jMitgliedsnummerTextfield.gridx = 3;
		gbc_jMitgliedsnummerTextfield.gridy = 2;
		add(getJMitgliedsnummerTextfield(), gbc_jMitgliedsnummerTextfield);
		GridBagConstraints gbc_lblStrae = new GridBagConstraints();
		gbc_lblStrae.anchor = GridBagConstraints.EAST;
		gbc_lblStrae.insets = new Insets(0, 0, 5, 5);
		gbc_lblStrae.gridx = 0;
		gbc_lblStrae.gridy = 3;
		add(getLblStrae(), gbc_lblStrae);
		GridBagConstraints gbc_jStrasseTextfield = new GridBagConstraints();
		gbc_jStrasseTextfield.insets = new Insets(0, 0, 5, 5);
		gbc_jStrasseTextfield.fill = GridBagConstraints.HORIZONTAL;
		gbc_jStrasseTextfield.gridx = 1;
		gbc_jStrasseTextfield.gridy = 3;
		add(getJStrasseTextfield(), gbc_jStrasseTextfield);
		GridBagConstraints gbc_lblTelefon = new GridBagConstraints();
		gbc_lblTelefon.insets = new Insets(0, 0, 5, 5);
		gbc_lblTelefon.anchor = GridBagConstraints.EAST;
		gbc_lblTelefon.gridx = 2;
		gbc_lblTelefon.gridy = 3;
		add(getLblTelefon(), gbc_lblTelefon);
		GridBagConstraints gbc_jTelefonTextField = new GridBagConstraints();
		gbc_jTelefonTextField.insets = new Insets(0, 0, 5, 0);
		gbc_jTelefonTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_jTelefonTextField.gridx = 3;
		gbc_jTelefonTextField.gridy = 3;
		add(getJTelefonTextField(), gbc_jTelefonTextField);
		GridBagConstraints gbc_lblPlz = new GridBagConstraints();
		gbc_lblPlz.insets = new Insets(0, 0, 5, 5);
		gbc_lblPlz.anchor = GridBagConstraints.EAST;
		gbc_lblPlz.gridx = 0;
		gbc_lblPlz.gridy = 4;
		add(getLblPlz(), gbc_lblPlz);
		GridBagConstraints gbc_jPLZTextfield = new GridBagConstraints();
		gbc_jPLZTextfield.insets = new Insets(0, 0, 5, 5);
		gbc_jPLZTextfield.fill = GridBagConstraints.HORIZONTAL;
		gbc_jPLZTextfield.gridx = 1;
		gbc_jPLZTextfield.gridy = 4;
		add(getJPLZTextfield(), gbc_jPLZTextfield);
		GridBagConstraints gbc_lblHandy = new GridBagConstraints();
		gbc_lblHandy.anchor = GridBagConstraints.EAST;
		gbc_lblHandy.insets = new Insets(0, 0, 5, 5);
		gbc_lblHandy.gridx = 2;
		gbc_lblHandy.gridy = 4;
		add(getLblHandy(), gbc_lblHandy);
		GridBagConstraints gbc_jHandyTextfield = new GridBagConstraints();
		gbc_jHandyTextfield.insets = new Insets(0, 0, 5, 0);
		gbc_jHandyTextfield.fill = GridBagConstraints.HORIZONTAL;
		gbc_jHandyTextfield.gridx = 3;
		gbc_jHandyTextfield.gridy = 4;
		add(getJHandyTextField(), gbc_jHandyTextfield);
		GridBagConstraints gbc_lblOrt = new GridBagConstraints();
		gbc_lblOrt.insets = new Insets(0, 0, 5, 5);
		gbc_lblOrt.anchor = GridBagConstraints.EAST;
		gbc_lblOrt.gridx = 0;
		gbc_lblOrt.gridy = 5;
		add(getLblOrt(), gbc_lblOrt);
		GridBagConstraints gbc_jOrtTextfield = new GridBagConstraints();
		gbc_jOrtTextfield.insets = new Insets(0, 0, 5, 5);
		gbc_jOrtTextfield.fill = GridBagConstraints.HORIZONTAL;
		gbc_jOrtTextfield.gridx = 1;
		gbc_jOrtTextfield.gridy = 5;
		add(getJOrtTextfield(), gbc_jOrtTextfield);
		GridBagConstraints gbc_lblEmail = new GridBagConstraints();
		gbc_lblEmail.anchor = GridBagConstraints.EAST;
		gbc_lblEmail.insets = new Insets(0, 0, 5, 5);
		gbc_lblEmail.gridx = 2;
		gbc_lblEmail.gridy = 5;
		add(getLblEmail(), gbc_lblEmail);
		GridBagConstraints gbc_jEmailTextField = new GridBagConstraints();
		gbc_jEmailTextField.insets = new Insets(0, 0, 5, 0);
		gbc_jEmailTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_jEmailTextField.gridx = 3;
		gbc_jEmailTextField.gridy = 5;
		add(getjEmailTextField(), gbc_jEmailTextField);
		GridBagConstraints gbc_lblGeburtstag = new GridBagConstraints();
		gbc_lblGeburtstag.anchor = GridBagConstraints.EAST;
		gbc_lblGeburtstag.insets = new Insets(0, 0, 5, 5);
		gbc_lblGeburtstag.gridx = 0;
		gbc_lblGeburtstag.gridy = 6;
		add(getLblGeburtstag(), gbc_lblGeburtstag);
		GridBagConstraints gbc_jGeburtstagPicker = new GridBagConstraints();
		gbc_jGeburtstagPicker.insets = new Insets(0, 0, 5, 5);
		gbc_jGeburtstagPicker.fill = GridBagConstraints.HORIZONTAL;
		gbc_jGeburtstagPicker.gridx = 1;
		gbc_jGeburtstagPicker.gridy = 6;
		add(getJGeburtstagsDatePicker(), gbc_jGeburtstagPicker);
		GridBagConstraints gbc_lblStatus = new GridBagConstraints();
		gbc_lblStatus.anchor = GridBagConstraints.EAST;
		gbc_lblStatus.insets = new Insets(0, 0, 5, 5);
		gbc_lblStatus.gridx = 2;
		gbc_lblStatus.gridy = 6;
		add(getLblStatus(), gbc_lblStatus);
		GridBagConstraints gbc_comboBox = new GridBagConstraints();
		gbc_comboBox.insets = new Insets(0, 0, 5, 0);
		gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
		gbc_comboBox.gridx = 3;
		gbc_comboBox.gridy = 6;
		add(getStatusComboBox(), gbc_comboBox);
		GridBagConstraints gbc_lbllehrgngefunktionen = new GridBagConstraints();
		gbc_lbllehrgngefunktionen.insets = new Insets(0, 0, 5, 5);
		gbc_lbllehrgngefunktionen.gridx = 0;
		gbc_lbllehrgngefunktionen.gridy = 7;
		add(getLbllehrgngefunktionen(), gbc_lbllehrgngefunktionen);
		GridBagConstraints gbc_panel_1 = new GridBagConstraints();
		gbc_panel_1.gridwidth = 3;
		gbc_panel_1.insets = new Insets(0, 0, 5, 0);
		gbc_panel_1.fill = GridBagConstraints.BOTH;
		gbc_panel_1.gridx = 1;
		gbc_panel_1.gridy = 7;
		add(getPanel_1(), gbc_panel_1);
		GridBagConstraints gbc_lblNchstePrfung = new GridBagConstraints();
		gbc_lblNchstePrfung.anchor = GridBagConstraints.EAST;
		gbc_lblNchstePrfung.insets = new Insets(0, 0, 5, 5);
		gbc_lblNchstePrfung.gridx = 0;
		gbc_lblNchstePrfung.gridy = 8;
		add(getLblNchstePrfung(), gbc_lblNchstePrfung);
		GridBagConstraints gbc_jNaechstePruefungAnzeigen = new GridBagConstraints();
		gbc_jNaechstePruefungAnzeigen.gridwidth = 2;
		gbc_jNaechstePruefungAnzeigen.insets = new Insets(0, 0, 5, 5);
		gbc_jNaechstePruefungAnzeigen.fill = GridBagConstraints.HORIZONTAL;
		gbc_jNaechstePruefungAnzeigen.gridx = 1;
		gbc_jNaechstePruefungAnzeigen.gridy = 8;
		add(getJNaechstePruefungAnzeigen(), gbc_jNaechstePruefungAnzeigen);
		GridBagConstraints gbc_btnPfungEintragen = new GridBagConstraints();
		gbc_btnPfungEintragen.insets = new Insets(0, 0, 5, 0);
		gbc_btnPfungEintragen.gridx = 3;
		gbc_btnPfungEintragen.gridy = 8;
		add(getBtnPfungEintragen(), gbc_btnPfungEintragen);
		GridBagConstraints gbc_lbldurchgefhrteprfungen = new GridBagConstraints();
		gbc_lbldurchgefhrteprfungen.anchor = GridBagConstraints.EAST;
		gbc_lbldurchgefhrteprfungen.fill = GridBagConstraints.VERTICAL;
		gbc_lbldurchgefhrteprfungen.insets = new Insets(0, 0, 5, 5);
		gbc_lbldurchgefhrteprfungen.gridx = 0;
		gbc_lbldurchgefhrteprfungen.gridy = 9;
		add(getLbldurchgefhrteprfungen(), gbc_lbldurchgefhrteprfungen);
		GridBagConstraints gbc_panel_5 = new GridBagConstraints();
		gbc_panel_5.gridwidth = 3;
		gbc_panel_5.insets = new Insets(0, 0, 5, 0);
		gbc_panel_5.fill = GridBagConstraints.BOTH;
		gbc_panel_5.gridx = 1;
		gbc_panel_5.gridy = 9;
		add(getPanel_5(), gbc_panel_5);
		GridBagConstraints gbc_lblnotwendigeprfungen = new GridBagConstraints();
		gbc_lblnotwendigeprfungen.anchor = GridBagConstraints.EAST;
		gbc_lblnotwendigeprfungen.insets = new Insets(0, 0, 5, 5);
		gbc_lblnotwendigeprfungen.gridx = 0;
		gbc_lblnotwendigeprfungen.gridy = 10;
		add(getLblnotwendigeprfungen(), gbc_lblnotwendigeprfungen);
		GridBagConstraints gbc_panel_3 = new GridBagConstraints();
		gbc_panel_3.gridwidth = 3;
		gbc_panel_3.insets = new Insets(0, 0, 5, 0);
		gbc_panel_3.fill = GridBagConstraints.BOTH;
		gbc_panel_3.gridx = 1;
		gbc_panel_3.gridy = 10;
		add(getPanel_3(), gbc_panel_3);
		GridBagConstraints gbc_lblKommentar = new GridBagConstraints();
		gbc_lblKommentar.anchor = GridBagConstraints.EAST;
		gbc_lblKommentar.insets = new Insets(0, 0, 5, 5);
		gbc_lblKommentar.gridx = 0;
		gbc_lblKommentar.gridy = 11;
		add(getLblKommentar(), gbc_lblKommentar);
		GridBagConstraints gbc_jKommentarTextArea = new GridBagConstraints();
		gbc_jKommentarTextArea.fill = GridBagConstraints.BOTH;
		gbc_jKommentarTextArea.gridwidth = 3;
		gbc_jKommentarTextArea.insets = new Insets(0, 0, 5, 0);
		gbc_jKommentarTextArea.gridx = 1;
		gbc_jKommentarTextArea.gridy = 11;
		add(getKommentarScrollPane(), gbc_jKommentarTextArea);
		GridBagConstraints gbc_buttonpanel = new GridBagConstraints();
		gbc_buttonpanel.gridwidth = 4;
		gbc_buttonpanel.fill = GridBagConstraints.BOTH;
		gbc_buttonpanel.gridx = 0;
		gbc_buttonpanel.gridy = 12;
		add(getButtonpanel(), gbc_buttonpanel);
		changeList.add(getJBezeichnerTextField());
		changeList.add(getjEmailTextField());
		changeList.add(getJGeburtstagsDatePicker());
		changeList.add(getJHandyTextField());
		changeList.add(getJMitgliedsnummerTextfield());
		changeList.add(getJOrtTextfield());
		changeList.add(getJPLZTextfield());
		changeList.add(getJStrasseTextfield());
		changeList.add(getJTelefonTextField());
		changeList.add(getJgeschlechtsTextfield());
		changeList.add(getKommentartextArea());
		changeList.add(getStatusComboBox());
		getJBezeichnerTextField().setText(item.getBezeichner());
		getjEmailTextField().setText(item.getEmail());
		if (item.getGeburtstag() != 0) {
			getJGeburtstagsDatePicker().setDate(new Date(item.getGeburtstag()));
		}
		getJHandyTextField().setText(item.getMobiltelefon());
		getJMitgliedsnummerTextfield().setText(item.getMitgliedsnummer());
		getJOrtTextfield().setText(item.getOrt());
		getJPLZTextfield().setText(item.getPlz());
		getJStrasseTextfield().setText(item.getStrasse());
		getJTelefonTextField().setText(item.getTelefon());
		getJgeschlechtsTextfield().setText(item.getGeschlecht());
		getKommentartextArea().setText(item.getKommentar());
		getStatusComboBox().setPreSelectedItem(item.getStatus());
		updateListModels();
	}

	/**
	 * 
	 * @author Christian
	 * @return
	 * @see gwtool.gui.dataSetView.DataSetView#hasChanges()
	 */
	@Override
	public boolean hasChanges() {

		if (changesFlag) {
			return true;
		}
		for (ChangeSupport c : changeList) {
			if (c.hasChanged()) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 
	 * @author Christian
	 * @return
	 * @see gwtool.gui.dataSetView.DataSetView#getDataFromGui()
	 */
	@Override
	public DataSetItem getDataFromGui() {

		PersonItem item = new PersonItem();
		item.setBezeichner(getJBezeichnerTextField().getText());
		item.setEmail(getjEmailTextField().getText());
		item.setGeschlecht(getJgeschlechtsTextfield().getText());
		item.setKommentar(getKommentartextArea().getText());
		item.setMitgliedsnummer(getJMitgliedsnummerTextfield().getText());
		item.setMobiltelefon(getJHandyTextField().getText());
		item.setOrt(getJOrtTextfield().getText());
		item.setPlz(getJPLZTextfield().getText());
		item.setStatus("");
		item.setStrasse(getJStrasseTextfield().getText());
		item.setTelefon(getJTelefonTextField().getText());
		item.setStatus(getStatusComboBox().getSelectedItem().toString());
		if (getJGeburtstagsDatePicker().getDate() != null) {
			item.setGeburtstag(getJGeburtstagsDatePicker().getDate().getTime());
		}
		// eforderliche
		List<InlinePruefung> erforderlichePruefungenList = new ArrayList<>();
		for (int i = 0; i < getJNotwendigeList().getModel().getSize(); i++) {
			erforderlichePruefungenList.add(((InlinePruefung) getJNotwendigeList().getModel().getElementAt(i)).clone());
		}
		item.setNoetigePruefungen(erforderlichePruefungenList);
		// durchgeführte
		List<Geprueft> durchgefuehrtPruefungenList = new ArrayList<>();
		for (int i = 0; i < getJGeprueftList().getModel().getSize(); i++) {
			durchgefuehrtPruefungenList.add(((Geprueft) getJGeprueftList().getModel().getElementAt(i)).clone());
		}
		item.setDurchgefuehrtePruefungen(durchgefuehrtPruefungenList);
		// Lehrgaenge
		List<InlineLehrgang> lehrgaenge = new ArrayList<>();
		for (int i = 0; i < getLehrgaengelist().getModel().getSize(); i++) {
			lehrgaenge.add(((InlineLehrgang) getLehrgaengelist().getModel().getElementAt(i)).clone());
		}
		item.setLehrgaenge(lehrgaenge);
		return item;
	}

	/**
	 * 
	 * @author Christian
	 * @return
	 * @see gwtool.gui.dataSetView.DataSetView#getJPanel()
	 */
	@Override
	public JPanel getJPanel() {

		return this;
	}

	@Override
	public String getTabBezeichner() {

		return getJBezeichnerTextField().getText();
	}

	private JTextAreaWithMenu getKommentartextArea() {

		if (kommentartextArea == null) {
			kommentartextArea = new JTextAreaWithMenu();
			kommentartextArea.setLineWrap(true);
		}
		return kommentartextArea;
	}

	private JLabel getLblKommentar() {

		if (lblKommentar == null) {
			lblKommentar = new JLabel("Kommentar");
		}
		return lblKommentar;
	}

	private JLabel getLblNewLabel() {

		if (lblNewLabel == null) {
			lblNewLabel = new JLabel("Name");
		}
		return lblNewLabel;
	}

	private JTextFieldWithMenu getJBezeichnerTextField() {

		if (jBezeichnerTextField == null) {
			jBezeichnerTextField = new JTextFieldWithMenu();
			jBezeichnerTextField.setColumns(10);
		}
		return jBezeichnerTextField;
	}

	/**
	 * 
	 * @author Christian
	 * @return
	 * @see gwtool.gui.dataSetView.DataSetView#getBtnSpeichern()
	 */
	@Override
	public JButton getBtnSpeichern() {

		return getBtnSave();
	}

	/**
	 * 
	 * @author Christian
	 * @return
	 * @see gwtool.gui.dataSetView.DataSetView#getBtnSchlieen()
	 */
	@Override
	public JButton getBtnSchlieen() {

		return getBtnSchlieeen();
	}

	/**
	 * 
	 * @author Christian
	 * @return
	 * @see gwtool.gui.dataSetView.DataSetView#getBtnKopieErstellen()
	 */
	@Override
	public JButton getBtnKopieErstellen() {

		return getCopybutton();
	}

	private Panel getButtonpanel() {

		if (buttonpanel == null) {
			buttonpanel = new Panel();
			buttonpanel.add(getBtnSave());
			buttonpanel.add(getCopybutton());
			buttonpanel.add(getBtnSchlieeen());
			buttonpanel.add(getBtnDrucken());
		}
		return buttonpanel;
	}

	private JButton getBtnSave() {

		if (btnSave == null) {
			btnSave = new JButton("Speichern");
			btnSave.addActionListener(controller);
		}
		return btnSave;
	}

	private JButton getCopybutton() {

		if (copybutton == null) {
			copybutton = new JButton("Kopie erstellen");
			copybutton.addActionListener(controller);
		}
		return copybutton;
	}

	private JButton getBtnSchlieeen() {

		if (btnSchlieeen == null) {
			btnSchlieeen = new JButton("Schlie\u00DFen");
			btnSchlieeen.addActionListener(controller);
		}
		return btnSchlieeen;
	}

	private JLabel getLblMitgliedsnummer() {

		if (lblMitgliedsnummer == null) {
			lblMitgliedsnummer = new JLabel("Mitgliedsnummer");
		}
		return lblMitgliedsnummer;
	}

	private JTextFieldWithMenu getJMitgliedsnummerTextfield() {

		if (jMitgliedsnummerTextfield == null) {
			jMitgliedsnummerTextfield = new JTextFieldWithMenu();
			jMitgliedsnummerTextfield.setColumns(10);
		}
		return jMitgliedsnummerTextfield;
	}

	private JTextFieldWithMenu getJgeschlechtsTextfield() {

		if (jgeschlechtsTextfield == null) {
			jgeschlechtsTextfield = new JTextFieldWithMenu();
			jgeschlechtsTextfield.setColumns(10);
		}
		return jgeschlechtsTextfield;
	}

	private JLabel getLblStrae() {

		if (lblStrae == null) {
			lblStrae = new JLabel("Stra\u00DFe");
		}
		return lblStrae;
	}

	private JTextFieldWithMenu getJPLZTextfield() {

		if (jPLZTextfield == null) {
			jPLZTextfield = new JTextFieldWithMenu();
			jPLZTextfield.setColumns(10);
		}
		return jPLZTextfield;
	}

	private JTextFieldWithMenu getJOrtTextfield() {

		if (jOrtTextfield == null) {
			jOrtTextfield = new JTextFieldWithMenu();
			jOrtTextfield.setColumns(10);
		}
		return jOrtTextfield;
	}

	private JTextFieldWithMenu getJStrasseTextfield() {

		if (jStrasseTextfield == null) {
			jStrasseTextfield = new JTextFieldWithMenu();
			jStrasseTextfield.setColumns(10);
		}
		return jStrasseTextfield;
	}

	private JTextFieldWithMenu getJTelefonTextField() {

		if (jTelefonTextField == null) {
			jTelefonTextField = new JTextFieldWithMenu();
			jTelefonTextField.setColumns(10);
		}
		return jTelefonTextField;
	}

	private JLabel getLblPlz() {

		if (lblPlz == null) {
			lblPlz = new JLabel("PLZ");
		}
		return lblPlz;
	}

	private JLabel getLblOrt() {

		if (lblOrt == null) {
			lblOrt = new JLabel("Ort");
		}
		return lblOrt;
	}

	private JList getLehrgaengelist() {

		if (lehrgaengelist == null) {
			lehrgaengelist = new JList();
		}
		return lehrgaengelist;
	}

	private JLabel getLblGeschlecht() {

		if (lblGeschlecht == null) {
			lblGeschlecht = new JLabel("Geschlecht");
		}
		return lblGeschlecht;
	}

	private JLabel getLblTelefon() {

		if (lblTelefon == null) {
			lblTelefon = new JLabel("Telefon");
		}
		return lblTelefon;
	}

	private JLabel getLblHandy() {

		if (lblHandy == null) {
			lblHandy = new JLabel("Handy");
		}
		return lblHandy;
	}

	private JTextFieldWithMenu getJHandyTextField() {

		if (jHandyTextfield == null) {
			jHandyTextfield = new JTextFieldWithMenu();
			jHandyTextfield.setColumns(10);
		}
		return jHandyTextfield;
	}

	private JLabel getLbldurchgefhrteprfungen() {

		if (lbldurchgefhrteprfungen == null) {
			lbldurchgefhrteprfungen = new JLabel("<html>Durchgef\u00FChrte<br>Pr\u00FCfungen");
		}
		return lbldurchgefhrteprfungen;
	}

	private JLabel getLblnotwendigeprfungen() {

		if (lblnotwendigeprfungen == null) {
			lblnotwendigeprfungen = new JLabel("<html>Notwendige<br>Pr\u00FCfungen");
		}
		return lblnotwendigeprfungen;
	}

	private JLabel getLbllehrgngefunktionen() {

		if (lbllehrgngefunktionen == null) {
			lbllehrgngefunktionen = new JLabel("<html>Lehrg\u00E4nge<br>Funktionen");
		}
		return lbllehrgngefunktionen;
	}

	private JLabel getLblEmail() {

		if (lblEmail == null) {
			lblEmail = new JLabel("Email");
		}
		return lblEmail;
	}

	private JTextFieldWithMenu getjEmailTextField() {

		if (jEmailTextField == null) {
			jEmailTextField = new JTextFieldWithMenu();
			jEmailTextField.setColumns(10);
		}
		return jEmailTextField;
	}

	private JLabel getLblGeburtstag() {

		if (lblGeburtstag == null) {
			lblGeburtstag = new JLabel("Geburtstag");
		}
		return lblGeburtstag;
	}

	private JXDatePickerWithChangeSupport getJGeburtstagsDatePicker() {

		if (jGeburtstagPicker == null) {
			jGeburtstagPicker = new JXDatePickerWithChangeSupport();
		}
		return jGeburtstagPicker;
	}

	private JPanel getPanel_1() {

		if (panel_1 == null) {
			panel_1 = new JPanel();
			GridBagLayout gbl_panel_1 = new GridBagLayout();
			gbl_panel_1.columnWidths = new int[] { 0, 0, 0 };
			gbl_panel_1.rowHeights = new int[] { 0, 0 };
			gbl_panel_1.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
			gbl_panel_1.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
			panel_1.setLayout(gbl_panel_1);
			GridBagConstraints gbc_scrollPane = new GridBagConstraints();
			gbc_scrollPane.fill = GridBagConstraints.BOTH;
			gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
			gbc_scrollPane.gridx = 0;
			gbc_scrollPane.gridy = 0;
			panel_1.add(getLehrgangsScrollPane(), gbc_scrollPane);
			GridBagConstraints gbc_panel_2 = new GridBagConstraints();
			gbc_panel_2.anchor = GridBagConstraints.EAST;
			gbc_panel_2.gridx = 1;
			gbc_panel_2.gridy = 0;
			panel_1.add(getPanel_2(), gbc_panel_2);
		}
		return panel_1;
	}

	private JButton getBtnaddLehrgangbutton() {

		if (btnaddLehrgangbutton == null) {
			btnaddLehrgangbutton = new JButton("+");
			btnaddLehrgangbutton.addActionListener(this);
		}
		return btnaddLehrgangbutton;
	}

	private JButton getBtnLehrgangEdit() {

		if (btnLehrgangEdit == null) {
			btnLehrgangEdit = new JButton("edit");
			btnLehrgangEdit.addActionListener(this);
		}
		return btnLehrgangEdit;
	}

	private JButton getBtnDelLehrgang() {

		if (btnDelLehrgang == null) {
			btnDelLehrgang = new JButton("-");
			btnDelLehrgang.addActionListener(this);
		}
		return btnDelLehrgang;
	}

	private JPanel getPanel_2() {

		if (panel_2 == null) {
			panel_2 = new JPanel();
			GridBagLayout gbl_panel_2 = new GridBagLayout();
			gbl_panel_2.columnWidths = new int[] { 41, 0 };
			gbl_panel_2.rowHeights = new int[] { 23, 0, 0, 0 };
			gbl_panel_2.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
			gbl_panel_2.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
			panel_2.setLayout(gbl_panel_2);
			GridBagConstraints gbc_btnaddLehrgangbutton = new GridBagConstraints();
			gbc_btnaddLehrgangbutton.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnaddLehrgangbutton.anchor = GridBagConstraints.NORTH;
			gbc_btnaddLehrgangbutton.insets = new Insets(0, 0, 5, 0);
			gbc_btnaddLehrgangbutton.gridx = 0;
			gbc_btnaddLehrgangbutton.gridy = 0;
			panel_2.add(getBtnaddLehrgangbutton(), gbc_btnaddLehrgangbutton);
			GridBagConstraints gbc_btnLehrgangEdit = new GridBagConstraints();
			gbc_btnLehrgangEdit.anchor = GridBagConstraints.NORTHWEST;
			gbc_btnLehrgangEdit.insets = new Insets(0, 0, 5, 0);
			gbc_btnLehrgangEdit.gridx = 0;
			gbc_btnLehrgangEdit.gridy = 1;
			panel_2.add(getBtnLehrgangEdit(), gbc_btnLehrgangEdit);
			GridBagConstraints gbc_btnDelLehrgang = new GridBagConstraints();
			gbc_btnDelLehrgang.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnDelLehrgang.gridx = 0;
			gbc_btnDelLehrgang.gridy = 2;
			panel_2.add(getBtnDelLehrgang(), gbc_btnDelLehrgang);
		}
		return panel_2;
	}

	private JScrollPane getLehrgangsScrollPane() {

		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			scrollPane.setViewportView(getLehrgaengelist());
		}
		return scrollPane;
	}

	private JPanel getPanel_3() {

		if (panel_3 == null) {
			panel_3 = new JPanel();
			GridBagLayout gbl_panel_3 = new GridBagLayout();
			gbl_panel_3.columnWidths = new int[] { 0, 51, 0 };
			gbl_panel_3.rowHeights = new int[] { 0, 0 };
			gbl_panel_3.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
			gbl_panel_3.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
			panel_3.setLayout(gbl_panel_3);
			GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints();
			gbc_scrollPane_2.insets = new Insets(0, 0, 0, 5);
			gbc_scrollPane_2.fill = GridBagConstraints.BOTH;
			gbc_scrollPane_2.gridx = 0;
			gbc_scrollPane_2.gridy = 0;
			panel_3.add(getScrollPane_2(), gbc_scrollPane_2);
			GridBagConstraints gbc_panel_4 = new GridBagConstraints();
			gbc_panel_4.fill = GridBagConstraints.HORIZONTAL;
			gbc_panel_4.gridx = 1;
			gbc_panel_4.gridy = 0;
			panel_3.add(getPanel_4(), gbc_panel_4);
		}
		return panel_3;
	}

	private JPanel getPanel_4() {

		if (panel_4 == null) {
			panel_4 = new JPanel();
			GridBagLayout gbl_panel_4 = new GridBagLayout();
			gbl_panel_4.columnWidths = new int[] { 51, 0 };
			gbl_panel_4.rowHeights = new int[] { 23, 23, 23, 0 };
			gbl_panel_4.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
			gbl_panel_4.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
			panel_4.setLayout(gbl_panel_4);
			GridBagConstraints gbc_btnAddNoetig = new GridBagConstraints();
			gbc_btnAddNoetig.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnAddNoetig.insets = new Insets(0, 0, 5, 0);
			gbc_btnAddNoetig.gridx = 0;
			gbc_btnAddNoetig.gridy = 0;
			panel_4.add(getBtnAddNoetig(), gbc_btnAddNoetig);
			GridBagConstraints gbc_btnEditNoetig = new GridBagConstraints();
			gbc_btnEditNoetig.insets = new Insets(0, 0, 5, 0);
			gbc_btnEditNoetig.gridx = 0;
			gbc_btnEditNoetig.gridy = 1;
			panel_4.add(getBtnEditNoetig(), gbc_btnEditNoetig);
			GridBagConstraints gbc_btnDelNoetig = new GridBagConstraints();
			gbc_btnDelNoetig.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnDelNoetig.gridx = 0;
			gbc_btnDelNoetig.gridy = 2;
			panel_4.add(getBtnDelNoetig(), gbc_btnDelNoetig);
		}
		return panel_4;
	}

	private JButton getBtnAddDurchgefuehrt() {

		if (btnAddDurchgefuehrt == null) {
			btnAddDurchgefuehrt = new JButton("+");
			btnAddDurchgefuehrt.addActionListener(this);
		}
		return btnAddDurchgefuehrt;
	}

	private JButton getBtnDurchgefuehrtEditButton() {

		if (btnDurchgefuehrtEditButton == null) {
			btnDurchgefuehrtEditButton = new JButton("edit");
			btnDurchgefuehrtEditButton.addActionListener(this);
		}
		return btnDurchgefuehrtEditButton;
	}

	private JButton getBtnDurchgefuehrtDel() {

		if (btnDurchgefuehrtDel == null) {
			btnDurchgefuehrtDel = new JButton("-");
			btnDurchgefuehrtDel.addActionListener(this);
		}
		return btnDurchgefuehrtDel;
	}

	private JPanel getPanel_5() {

		if (panel_5 == null) {
			panel_5 = new JPanel();
			GridBagLayout gbl_panel_5 = new GridBagLayout();
			gbl_panel_5.columnWidths = new int[] { 0, 0, 0 };
			gbl_panel_5.rowHeights = new int[] { 23, 0 };
			gbl_panel_5.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
			gbl_panel_5.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
			panel_5.setLayout(gbl_panel_5);
			GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
			gbc_scrollPane_1.insets = new Insets(0, 0, 0, 5);
			gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
			gbc_scrollPane_1.gridx = 0;
			gbc_scrollPane_1.gridy = 0;
			panel_5.add(getScrollPane_1_1(), gbc_scrollPane_1);
			GridBagConstraints gbc_panel = new GridBagConstraints();
			gbc_panel.fill = GridBagConstraints.HORIZONTAL;
			gbc_panel.gridx = 1;
			gbc_panel.gridy = 0;
			panel_5.add(getPanel(), gbc_panel);
		}
		return panel_5;
	}

	private JButton getBtnAddNoetig() {

		if (btnAddNoetig == null) {
			btnAddNoetig = new JButton("+");
			btnAddNoetig.addActionListener(this);
		}
		return btnAddNoetig;
	}

	private JButton getBtnEditNoetig() {

		if (btnEditNoetig == null) {
			btnEditNoetig = new JButton("edit");
			btnEditNoetig.addActionListener(this);
		}
		return btnEditNoetig;
	}

	private JButton getBtnDelNoetig() {

		if (btnDelNoetig == null) {
			btnDelNoetig = new JButton("-");
			btnDelNoetig.addActionListener(this);
		}
		return btnDelNoetig;
	}

	private JScrollPane getKommentarScrollPane() {

		if (jKommentarTextArea == null) {
			jKommentarTextArea = new JScrollPane();
			jKommentarTextArea.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			jKommentarTextArea.setViewportView(getKommentartextArea());
		}
		return jKommentarTextArea;
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		if (e.getSource() == getBtnaddLehrgangbutton()) {
			addLehrgang();
			updateListModels();
		}
		if (e.getSource() == getBtnLehrgangEdit()) {
			editLehrgang();
			updateListModels();
		}
		if (e.getSource() == getBtnDelLehrgang()) {
			delLehrgang();
			updateListModels();
		}
		if (e.getSource() == getBtnPfungEintragen()) {
			tragePruefungEin(item.getNaestePruefungen());
			updateListModels();
		}
		if (e.getSource() == getBtnAddDurchgefuehrt()) {
			tragePruefungEin(null);
			updateListModels();
		}
		if (e.getSource() == getBtnDurchgefuehrtEditButton()) {
			editEingetragenePruefunden();
			updateListModels();
		}
		if (e.getSource() == getBtnDurchgefuehrtDel()) {
			item.getDurchgefuehrtePruefungen().remove(getJGeprueftList().getSelectedValue());
			updateListModels();
		}
		if (e.getSource() == getBtnAddNoetig()) {
			trageErforderlichePruefungEin();
			updateListModels();
		}
		if (e.getSource() == getBtnEditNoetig()) {
			editiereErforderlichePruefung();
			updateListModels();
		}
		if (e.getSource() == getBtnDelNoetig()) {
			item.getNoetigePruefungen().remove(getJNotwendigeList().getSelectedValue());
			updateListModels();
		}
	}

	private void updateListModels() {

		DefaultListModel<InlinePruefung> model = new DefaultListModel<>();
		for (InlinePruefung p : item.getNoetigePruefungen()) {
			model.addElement(p);
		}
		getJNotwendigeList().setModel(model);

		DefaultListModel<Geprueft> modelGeprueft = new DefaultListModel<>();
		Collections.sort(item.getDurchgefuehrtePruefungen());
		for (Geprueft g : item.getDurchgefuehrtePruefungen()) {
			modelGeprueft.addElement(g);
		}
		getJGeprueftList().setModel(modelGeprueft);

		// Lehrgang
		DefaultListModel<InlineLehrgang> modelLehrgang = new DefaultListModel<>();
		Collections.sort(item.getLehrgaenge());
		for (InlineLehrgang l : item.getLehrgaenge()) {
			modelLehrgang.addElement(l);
		}
		getLehrgaengelist().setModel(modelLehrgang);

		getJNaechstePruefungAnzeigen().setText(item.getNaestePruefungen().toString());
		getStatusComboBox().setSelectedItem(item.getStatus());
	}

	private void addLehrgang() {

		List<OnlineLehrgangItem> list = MainController.getInstance().getDataController().getAlleLehrgaenge();
		if (list.size() == 0) {
			JOptionPane.showMessageDialog(this, "Unten Links mit dem Neu Brutton einen Lehrgang erstellen!");
			return;
		}
		OnlineLehrgangItem auswahl = (OnlineLehrgangItem) JOptionPane.showInputDialog(this, "", "Erforderliche Eintragen",
				JOptionPane.QUESTION_MESSAGE, null, list.toArray(), null);
		if (auswahl != null) {
			JXDatePicker datepicker = new JXDatePicker(new Date());
			int erg = JOptionPane.showConfirmDialog(this, datepicker, "Datum der " + auswahl.getBezeichner() + " Prüfung?",
					JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
			if (erg != JOptionPane.YES_OPTION) {
				return;
			}
			InlineLehrgang newLehrgang = new InlineLehrgang(auswahl.getBezeichner(), auswahl.getKommentar());
			newLehrgang.setSeit(datepicker.getDate());
			this.item.getLehrgaenge().add(newLehrgang);
			changesFlag = true;
		}
	}

	private void editLehrgang() {

		InlineLehrgang p = (InlineLehrgang) getLehrgaengelist().getSelectedValue();
		if (p == null) {
			JOptionPane.showMessageDialog(this, "Bitte Lehrgang wühlen!");
			return;
		}
		String name = JOptionPane.showInputDialog(this, "Name eingeben", p.getBezeichner());
		if (name == null) {
			return;
		}
		p.setBezeichner(name);
		JXDatePicker datepicker = new JXDatePicker(p.getSeit());
		int erg = JOptionPane.showConfirmDialog(this, datepicker, p.getBezeichner() + " seit?", JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE);
		if (erg != JOptionPane.YES_OPTION) {
			return;
		}
		p.setSeit(datepicker.getDate());
		Object[] options = { "Weiter aktive", "Ende Am" };
		int erg3 = JOptionPane.showOptionDialog(this, "Enddatum", p.getBezeichner() + " bis? ", JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
		if (erg3 == 1) {
			// Enddatumeintragen
			Date date = new Date();
			if (p.getBis() != null) {
				date = p.getBis();
			}
			JXDatePicker datepicker2 = new JXDatePicker(date);
			int erg2 = JOptionPane.showConfirmDialog(this, datepicker2, p.getBezeichner() + " bis? ",
					JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
			if (erg2 == JOptionPane.YES_OPTION) {
				p.setBis(datepicker2.getDate());
			}
		} else {
			p.setBis(null);
		}
		// Kommentare
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar eingeben", p.getKommentar());
		if (kommentar == null) {
			return;
		}
		p.setKommentar(kommentar);
		changesFlag = true;
	}

	@SuppressWarnings("unchecked")
	private void delLehrgang() {

		InlineLehrgang p = (InlineLehrgang) getLehrgaengelist().getSelectedValue();
		if (p == null) {
			JOptionPane.showMessageDialog(this, "Bitte Lehrgang wählen!");
			return;
		}
		// ((DefaultListModel<InlineLehrgang>)getLehrgaengelist().getModel()).removeElement(p);
		item.getLehrgaenge().remove(p);
	}

	private void tragePruefungEin(PruefungAnzeigen pAnzeigen) {

		if (getJNotwendigeList().getModel().getSize() == 0) {
			JOptionPane.showMessageDialog(this, "Es sind keine notwendigen Prüfungen eingetragen!");
			return;
		}
		String ident = "";
		String name = "";
		if (pAnzeigen == null) {
			InlinePruefung answer = (InlinePruefung) JOptionPane.showInputDialog(this,
					"Welche Prüfung soll durchgeführt werden?", "Prüfung", JOptionPane.QUESTION_MESSAGE, null, item
							.getNoetigePruefungen().toArray(), null);
			if (answer != null) {
				ident = answer.getIdentifier();
				name = answer.getName();
			} else {
				return;
			}
		} else {
			ident = pAnzeigen.getIdentifer();
			name = pAnzeigen.getPruefungsName();
		}
		JXDatePicker datepicker = new JXDatePicker(new Date());
		int erg = JOptionPane.showConfirmDialog(this, datepicker, "Datum der " + name + " Prüfung?",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
		if (erg != JOptionPane.YES_OPTION) {
			return;
		}
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar zur Prüfung", name, JOptionPane.INFORMATION_MESSAGE);
		if (kommentar == null) {
			return;
		}
		Geprueft geprueft = new Geprueft();
		geprueft.setIndentifer(ident);
		geprueft.setGesprueftAM(datepicker.getDate());
		geprueft.setKommentart(kommentar);
		geprueft.setName(name);
		item.getDurchgefuehrtePruefungen().add(geprueft);
		changesFlag = true;
	}

	private void trageErforderlichePruefungEin() {

		List<OnlinePruefungItem> list = MainController.getInstance().getDataController().getAllePruefungen();
		if (list.size() == 0) {
			JOptionPane.showMessageDialog(this, "Unten Links mit dem Neu Brutton eine Prüfung erstellen!");
			return;
		}
		OnlinePruefungItem auswahl = (OnlinePruefungItem) JOptionPane.showInputDialog(this, "", "Erforderliche Eintragen",
				JOptionPane.QUESTION_MESSAGE, null, list.toArray(), null);
		if (auswahl != null) {
			InlinePruefung newPruefung = new InlinePruefung(auswahl.getBezeichner(), auswahl.getInterval(),
					auswahl.getKommentar());
			this.item.getNoetigePruefungen().add(newPruefung);
		}
		changesFlag = true;
	}

	private void editEingetragenePruefunden() {

		Geprueft p = (Geprueft) getJGeprueftList().getSelectedValue();
		if (p == null) {
			JOptionPane.showMessageDialog(this, "Bitte eine durchgeführte Prüfung wählen!");
			return;
		}
		// Datum anpassen
		JXDatePicker datepicker = new JXDatePicker(p.getGesprueftAM());
		int erg = JOptionPane.showConfirmDialog(this, datepicker, "Datum der Prüfung?", JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE);
		if (erg != JOptionPane.YES_OPTION) {
			return;
		}
		p.setGesprueftAM(datepicker.getDate());
		// kommentar ändern
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar anpassen", p.getKommentar());
		if (kommentar == null) {
			return;
		}
		p.setKommentart(kommentar);
		changesFlag = true;
	}

	private void editiereErforderlichePruefung() {

		InlinePruefung p = (InlinePruefung) getJNotwendigeList().getSelectedValue();
		if (p == null) {
			JOptionPane.showMessageDialog(this, "Bitte Prüfung wählen!");
			return;
		}
		String name = JOptionPane.showInputDialog(this, "Name eingeben", p.getName());
		if (name == null) {
			return;
		}
		p.setName(name);
		boolean zahlOK = false;
		while (!zahlOK) {
			String intervall = JOptionPane.showInputDialog(this, "Intervall in Monaten eingeben", p.getIntervall());
			if (intervall == null) {
				return;
			}
			try {
				int intervall2 = Math.abs(Integer.parseInt(intervall));
				p.setIntervall(intervall2);
				zahlOK = true;
			} catch (Exception e) {
			}
		}
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar eingeben", p.getKommentar());
		if (kommentar == null) {
			return;
		}
		p.setKommentar(kommentar);
		changesFlag = true;
	}

	@Override
	public void wurdeGespeichert() {

		changesFlag = false;
		for (ChangeSupport c : changeList) {
			c.setChangedFalse();
		}
	}

	private JScrollPane getScrollPane_1_1() {

		if (scrollPane_1 == null) {
			scrollPane_1 = new JScrollPane();
			scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			scrollPane_1.setViewportView(getJGeprueftList());
		}
		return scrollPane_1;
	}

	private JList getJGeprueftList() {

		if (list == null) {
			list = new JList();
		}
		return list;
	}

	private JScrollPane getScrollPane_2() {

		if (scrollPane_2 == null) {
			scrollPane_2 = new JScrollPane();
			scrollPane_2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			scrollPane_2.setViewportView(getJNotwendigeList());
		}
		return scrollPane_2;
	}

	private JList getJNotwendigeList() {

		if (list_1 == null) {
			list_1 = new JList();
		}
		return list_1;
	}

	private JLabel getLblNchstePrfung() {

		if (lblNchstePrfung == null) {
			lblNchstePrfung = new JLabel("N\u00E4chste Pr\u00FCfung");
		}
		return lblNchstePrfung;
	}

	private JLabel getJNaechstePruefungAnzeigen() {

		if (jNaechstePruefungAnzeigen == null) {
			jNaechstePruefungAnzeigen = new JLabel();
			jNaechstePruefungAnzeigen.setText(" ");
		}
		return jNaechstePruefungAnzeigen;
	}

	private JButton getBtnPfungEintragen() {

		if (btnPfungEintragen == null) {
			btnPfungEintragen = new JButton("Pr\u00FCfung eintragen");
			btnPfungEintragen.addActionListener(this);
		}
		return btnPfungEintragen;
	}

	private JPanel getPanel() {

		if (panel == null) {
			panel = new JPanel();
			GridBagLayout gbl_panel = new GridBagLayout();
			gbl_panel.columnWidths = new int[] { 0, 0 };
			gbl_panel.rowHeights = new int[] { 0, 0, 0, 0 };
			gbl_panel.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
			gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
			panel.setLayout(gbl_panel);
			GridBagConstraints gbc_btnAddDurchgefuehrt = new GridBagConstraints();
			gbc_btnAddDurchgefuehrt.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnAddDurchgefuehrt.insets = new Insets(0, 0, 5, 0);
			gbc_btnAddDurchgefuehrt.gridx = 0;
			gbc_btnAddDurchgefuehrt.gridy = 0;
			panel.add(getBtnAddDurchgefuehrt(), gbc_btnAddDurchgefuehrt);
			GridBagConstraints gbc_btnDurchgefuehrtEditButton = new GridBagConstraints();
			gbc_btnDurchgefuehrtEditButton.insets = new Insets(0, 0, 5, 0);
			gbc_btnDurchgefuehrtEditButton.gridx = 0;
			gbc_btnDurchgefuehrtEditButton.gridy = 1;
			panel.add(getBtnDurchgefuehrtEditButton(), gbc_btnDurchgefuehrtEditButton);
			GridBagConstraints gbc_btnDurchgefuehrtDel = new GridBagConstraints();
			gbc_btnDurchgefuehrtDel.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnDurchgefuehrtDel.gridx = 0;
			gbc_btnDurchgefuehrtDel.gridy = 2;
			panel.add(getBtnDurchgefuehrtDel(), gbc_btnDurchgefuehrtDel);
		}
		return panel;
	}

	private JLabel getLblStatus() {

		if (lblStatus == null) {
			lblStatus = new JLabel("Status:");
		}
		return lblStatus;
	}

	private ComboBoxWithChangeSupport getStatusComboBox() {

		if (statusComboBox == null) {
			statusComboBox = new ComboBoxWithChangeSupport();
			statusComboBox.setModel(new DefaultComboBoxModel(new String[] { "Aktive", "Passive", "Altersabteilung",
					"Jugendfeuerwehr" }));
		}
		return statusComboBox;
	}

	private JLabel getLblKeineSchreibrechte() {

		if (lblKeineSchreibrechte == null) {
			lblKeineSchreibrechte = new JLabel("Keine Schreibrechte!");
			lblKeineSchreibrechte.setForeground(Color.ORANGE);
		}
		return lblKeineSchreibrechte;
	}

	@Override
	public JButton getBtnDrucken() {

		if (btnDrucken == null) {
			btnDrucken = new JButton("Drucken");
			btnDrucken.addActionListener(controller);
		}
		return btnDrucken;
	}
}
